<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>js的类型</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <button></button>
    <script>
        // typeof运算符
        // typeof undefined //undefined
        // typeof 'abc' //string
        // typeof 123  //number
        // typeof true //boolean
        // 前面四个是值类型
        // typeof {} //object 对象
        // typeof []  //object 数组
        // typeof null //object
        // typeof console.log //function 函数
        //值的类型
        var a = 100
        var b = a
        a = 200
        console.log(b) //100
       // document.write("<br>")
        //引用类型（对象、数组、函数）,指针指向
        var a = {age:20}
        var b = a
        b.age = 21
        console.log(a.age)//21
        
        // 变量计算-强制类型转换
        // 1.字符串的拼接
        var a = 100+10;//110
        var b = 100+'10';//10010
        console.log(a);
        console.log(b)

        // 2.==运算符
        console.log(100=='100');//true
        console.log(0=='');//true
        console.log(null==undefined);//true
        // 3.if语句
        // 4.逻辑运算
        console.log(10&&0);//0
        console.log(''||'abc');//abc
        console.log(!window.abc);//true
        var a1 = 100
        console.log(!a);//false
        console.log(!!a1);//true
        
        //问题1：如何使用===和==
        // if(obj.a==null){
        //     //这里相当于obj.a===null||obj.a===undefined的简写试
        // }
        //问题2：js中有哪些内置函数--数据封装类对象
        Object,Array,Boolean,Number,String,Function,Date,RegExp,Error
        //问题3：js变量存贮区分值类型，就是以上的值类型和其他类型
        //问题4：如何理解json：JSON只不过是一个js对象而已
        JSON.stringify({a:10,b:20});
        console.log(JSON.stringify({a:10,b:20})) //"a":10,"b":20
        JSON.parse('{"a":10,"b":20}');
        console.log(JSON.parse('{"a":10,"b":20}'));//a:10,b:20

        //1如何判断一个变量是数组类型
            // var arr = []
            // arr instanceof Array //true
            // typeof arr //"object"
        //2.写一个原型链继承的例子
           //动物
           function Animal(){
               this.eat = function(){
                   console.log('animal eat')
               }
           }
           //狗
           function Dog(){
               this.bark = function(){
                   console.log('dog bark')
               }
           }
           Dog.prototype = new Animal()
           var hasgiqi = new Dog();
        //3.描述一个new一个对象的过程
            function Foo(name,age){
                this.name = name
                this.age = age
                this.class = 'class-1' 
            }
            var f = new Foo('jing',20)
        //4.如何使用原型链
        //构造函数
        function Foo(name,age){
            this.name = name
            this.age = age
            this.class = 'class-1' 
        }
        var f = new Foo('jing',20)
        var f1 = new Foo('hedy',22)//可以创建多个对象
        //构造函数-扩展
        // var a = {}是var a = new Object()的语法糖
        // var a = []是var a = new Array()....
        // function Foo(){...}是 var Foo = new Function(...)
        // 使用instanceof判断一个函数是否是一个变量的构造函数

    </script>
</body>
</html>